from django.shortcuts import render, HttpResponse, redirect

# Create your views here.


# 校验用户是否登录的装饰器
'''
用户如果在没有登录的情况下想访问一个需要登录的页面
那么先跳转到登录页面 当用户输入正确的用户名和密码之后 
应该跳转到用户之前想要访问的页面去 而不是直接写死
'''


def login_auth(func):
    def inner(request, *args, **kwargs):
        # print(request.path_info)
        # print(request.get_full_path()) #能够获取到用户上一次想要访问的url
        target_url = request.get_full_path()
        if request.COOKIES.get('username'):
            res = func(request, *args, **kwargs)
            return res
        else:
            return redirect('/login/?next=%s' % target_url)

    return inner


def login(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        if username == 'jason' and password == '123':
            # 获取用户上一次想要访问的url
            target_url = request.GET.get('next')
            if target_url:
                obj = redirect(target_url)
            else:
                # 保存用户登录状态
                obj = redirect('/home/')
            # 让浏览器记录数据 ,max_age=3超时
            obj.set_cookie('username', 'jason666')
            '''
            浏览器不单单会帮你存
            而且后面每次访问你的时候还会带着它过来
            '''
            # 跳转一个需要用户登录之后才能看到的页面
            return obj
    return render(request, 'login.html')


@login_auth
def home(request):
    # #获取cookie信息 判断你有没有
    # if request.COOKIES.get('username')=='jason666':
    #     return HttpResponse('我是home页面,只有登录的用户才能进来哟')
    # #没有登录应该跳转到登录页面
    # return redirect('/login/')
    return HttpResponse('我是home页面,只有登录的用户才能进来哟')


@login_auth
def index(request):
    # #获取cookie信息 判断你有没有
    # if request.COOKIES.get('username')=='jason666':
    #     return HttpResponse('我是home页面,只有登录的用户才能进来哟')
    # #没有登录应该跳转到登录页面
    # return redirect('/login/')
    return HttpResponse('我是index页面,只有登录的用户才能进来哟')


@login_auth
def func(request):
    # #获取cookie信息 判断你有没有
    # if request.COOKIES.get('username')=='jason666':
    #     return HttpResponse('我是home页面,只有登录的用户才能进来哟')
    # #没有登录应该跳转到登录页面
    # return redirect('/login/')
    return HttpResponse('我是func页面,只有登录的用户才能进来哟')


@login_auth
def logout(request):
    obj = redirect('/login/')
    obj.delete_cookie('username')
    return obj


'''
session操作 保存在服务端(存) 给客户端返回的是一个随机字符串
sessionid:随机字符串
设置session
request.session['key']=value

获取session
requset.session.get('key')



1.在默认的情况下爱操作session的时候需要django默认的一张django_session表
数据库迁移命令
    django会自动创建很多表 django_session是其中一张

django默认session的过期时间是14天 但是可以人为修改

django_session表中的数据条数是取决于浏览器的
同一个计算机上同一个浏览器只会有一条数据生效
上一条失效可能会生成多条

#设置过期时间
request.session.set_expiry()
括号内可以放四种类型的参数
    1.整数 秒数
    2.日期对象  到指定日期就失效
    3.0         一旦当前浏览器窗口关闭立刻失效
    4.不写      失效时间就取决与django内部全局session默认的失效时间

#清除session
    request.session.delete() 只删服务端的
    request.session.flush()  浏览器和服务器都清空(推荐使用)

session是保存在服务端的 但是session的保存位置可以有多种选择
    1.Mysql
    2.文件
    3.redis
    4.memcache
    ...
'''


# 设置session
def set_session(request):
    '''
    内部发生了哪些事
        1.django内部会自动帮你生成一个随机字符串
        2.django内部自动将随机字符串和对应的数据存储到django_session表中
            2.1.先在内存中产生操作数据的缓存
            2.2.在响应结果django中间件的时候才真真的操作数据
        3.将随机字符串返回给客户端浏览器保存
    :param request:
    :return:
    '''
    request.session['hobby'] = 'girl'
    request.session['hobby1'] = 'girl1'
    request.session['hobby2'] = 'girl2'
    request.session['hobby3'] = 'girl3'
    request.session.set_expiry()
    return HttpResponse('嘿嘿嘿')


# 获取session
def get_session(request):
    '''
        内部发生了哪些事
        1.自动从浏览器请求中获取sessionid对应的随机字符串
        2.拿着该随机字符串去django_session表中查找对应的数据
        3.如果比对上了 则将对应的数据取出并以字典的形式封装到request.session中
          如果比对不上 则request.session.get()返回的是None
    :param request:
    :return:
    '''
    request.session.get('hobby')
    print(request.session.get('hobby'))
    return HttpResponse('哈哈哈哈')


